cefabcf5208837ea70b767539ac5e1d8743e4ce7,OsmAnd-java/src/net/osmand/router/RouteResultPreparation.java,RouteResultPreparation,mergeTurnLanes,#boolean#RouteSegmentResult#RouteSegmentResult#,429
Before Change
}
private void mergeTurnLanes(boolean leftSide, RouteSegmentResult currentSegment, RouteSegmentResult nextSegment) {
boolean isUsingTurnLanes = TurnType.getPrimaryTurn(currentSegment.getTurnType().getLanes()[0]) != 0
&& TurnType.getPrimaryTurn(nextSegment.getTurnType().getLanes()[0]) != 0;
if (isUsingTurnLanes) {
int[] lanes = new int[currentSegment.getTurnType().getLanes().length];
// Unset the allowed lane bit
for (int i = 0; i < lanes.length; i++) {
lanes[i] = currentSegment.getTurnType().getLanes()[i] & ~1;
}
// Find the first lane that matches (based on the turn being taken), and how many lanes match
int matchingIndex = 0;
int maxMatchedLanes = 0;
for (int i = 0; i < lanes.length; i++) {
int matchedLanes = 0;
for (int j = 0; j < nextSegment.getTurnType().getLanes().length - i; j++) {
if (TurnType.getPrimaryTurn(nextSegment.getTurnType().getLanes()[j])
== TurnType.getPrimaryTurn(currentSegment.getTurnType().getLanes()[i + j])) {
matchedLanes++;
} else {
break;
}
}
if (matchedLanes > maxMatchedLanes) {
matchingIndex = i;
maxMatchedLanes = matchedLanes;
}
}
if (maxMatchedLanes <= 1) {
return;
}
// Copy the allowed bit from the next segment's lanes to the current segment's matching lanes
for (int i = matchingIndex; i - matchingIndex < nextSegment.getTurnType().getLanes().length; i++) {
lanes[i] |= nextSegment.getTurnType().getLanes()[i - matchingIndex] & 1;
}
TurnType t = currentSegment.getTurnType();
t.setLanes(lanes);
After Change
private void mergeTurnLanes(boolean leftSide, RouteSegmentResult currentSegment, RouteSegmentResult nextSegment) {
TurnType currentTurn = currentSegment.getTurnType();
TurnType nextTurn = nextSegment.getTurnType();
boolean isUsingTurnLanes = TurnType.getPrimaryTurn(currentTurn.getLanes()[0]) != 0
&& TurnType.getPrimaryTurn(nextTurn.getLanes()[0]) != 0;
if (isUsingTurnLanes) {